package main

import (
	"errors"
	"fmt"
)

func main() {
	data := []int{5, 3, 6, 2, 10, 23, 41, 1, 3, 4, 5, 6, 7, 21} //举例
	sort, err := selectionSort(data)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(sort)
}

//找出最小的元素
func findSmallItem(list []int) (int, error) {
	smallitem := list[0]        //用于存放最小的元素
	smallindex := 0             //用于存放最小的元素的索引
	for i, item := range list { //遍历数组
		if item < smallitem { //判断是否元素是否为数组中最小值
			smallitem = item //更换最下元素值
			smallindex = i   //更新最小元素索引
		}
	}
	return smallindex, nil //返回最小元素索引
}

//对获取的最小元素进行排序
func selectionSort(list []int) ([]int, error) {
	newArray := make([]int, len(list)) //newArray用于存放排序后的元素
	for i := 0; i < len(newArray); i++ {
		smallindex, err := findSmallItem(list)
		if err != nil {
			fmt.Println("排序出现错误")
			return nil, errors.New("打印排序错误")
		}
		newArray[i] = list[smallindex]                           //依次将元素中的最小值添加到newArray中
		list = append(list[:smallindex], list[smallindex+1:]...) //将从findSmall中
		// 取处的最小元素从原数组list删除
		//再次对处理后的数组进行最小值的取出和删除
	}
	return newArray, nil
}
